package org.king.pojo;


import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;

public record RestBean<T>(int code, T data, String message) {
    // 状态码常量
    public static final int CODE_SUCCESS = 200;
    public static final int CODE_BAD_REQUEST = 400;
    public static final int CODE_INTERNAL_ERROR = 500;

    // 成功响应（带数据）
    public static <T> RestBean<T> success(T data) {
        return new RestBean<>(CODE_SUCCESS, data, "success");
    }

    // 成功响应（无数据）
    public static RestBean<Void> success() {
        return success(null);
    }

    // 失败响应（自定义状态码和消息）
    public static <T> RestBean<T> failure(int code, String message) {
        return new RestBean<>(code, null, message);
    }

    // 失败响应（自定义状态码）
    public static <T> RestBean<T> failure(int code) {
        return failure(code, "failure");
    }

    // 异常响应（自动提取异常消息）
    public static <T> RestBean<T> error(Throwable ex) {
        return failure(CODE_INTERNAL_ERROR, ex.getMessage());
    }

    // 转换为JSON字符串
    public String asJsonString() {
        return JSONObject.toJSONString(this, JSONWriter.Feature.WriteNulls);
    }
}



